/*
实现服务注册中心接口,创建注册中心接口

	注册中心作用目前来看，就是对各种服务做一个信息保存
*/
package registry

import "time"

/* //* 注册中心接口定义，包含服务注册、注销、查询和健康状态管理等核心功能，是服务发现机制的基础 */

// 服务信息
type ServiceInfo struct {
	ID         string            `json:"id"`         // 服务ID 服务的唯一标识
	Name       string            `json:"name"`       // 服务名称 服务的逻辑名称（如"user-service"、"order-service"，同一类服务名称相同）
	Address    string            `json:"address"`    // 服务地址 ip （供其他服务访问，这里暂时都是本地，实际上需要对应服务的机器所在ip，端口号也需要对应）
	Port       int               `json:"port"`       // 服务端口 port
	Metadata   map[string]string `json:"metadata"`   // 服务元数据 如协议、状态、版本等
	Healthy    bool              `json:"healthy"`    // 健康状态
	LastCheck  time.Time         `json:"lastCheck"`  // 最后检查时间
	Registered time.Time         `json:"registered"` // 注册时间
}

// 注册中心接口
type Registry interface {
	// 注册服务 服务启动时将自己的信息注册到注册中心
	Register(service *ServiceInfo) error
	// 注销服务 服务下线时从注册中心移除自己的信息
	Deregister(serviceID string) error
	// 获取服务 根据服务名称查询所有同名的服务信息（同一服务可能有多个实例）
	GetService(serviceName string) ([]*ServiceInfo, error)
	// 列出所有服务
	ListServices() ([]*ServiceInfo, error)
	// 设置服务定位器
	SetLocator(locator Locator) error
	// 更新服务健康状态
	UpdateHealthStatus(serviceID string, healthy bool) error
	// 获取健康服务
	GetHealthyServices(serviceName string) ([]*ServiceInfo, error)
	// ListHealthyServices 列出所有健康服务
	ListHealthyServices() ([]*ServiceInfo, error)
}

// 服务定位器接口
type Locator interface {
	// 发布服务
	// PublishServices(ctx context.Context, services []*ServiceInfo) error
	UpdateServices(services []*ServiceInfo) error
}
